/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.uoc.tdp.pac4.conexion;

import edu.uoc.tdp.pac4.beans.Usuari;
import edu.uoc.tdp.pac4.beans.Taller;
import edu.uoc.tdp.pac4.beans.Perfil;
import edu.uoc.tdp.pac4.comun.GestorConexionInterface;
import edu.uoc.tdp.pac4.i18n.TDSLanguageUtils;
import edu.uoc.tdp.pac4.cliente.Principal;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import java.util.ArrayList;
import javax.swing.JDialog;
import javax.swing.JOptionPane;


/**
 *
 * @author andres
 */
public class GestionConexionEditUser extends JInternalFrame {

    private GestorConexionInterface conexion;
    private JDesktopPane editUserWindow;
    private JLabel lbl_titol;
    private JButton btn_update;
    private JButton btn_back;    
    private JButton btn_add;
    private JLabel lbl_titol1;
     
    JLabel lbl_nom = new JLabel(TDSLanguageUtils.getMessage("Users.Nombre"));                    ;
    JLabel lbl_cognom1 = new JLabel(TDSLanguageUtils.getMessage("Users.Apellido1"));                    ;
    JLabel lbl_cognom2 = new JLabel(TDSLanguageUtils.getMessage("Users.Apellido2"));                    ;
    JLabel lbl_usuari = new JLabel(TDSLanguageUtils.getMessage("Users.Usuario"));                    
    JLabel lbl_contrasenya1 = new JLabel(TDSLanguageUtils.getMessage("Users.Pass1"));                        
    JLabel lbl_contrasenya2 = new JLabel(TDSLanguageUtils.getMessage("Users.Pass2"));
    JLabel lbl_perfil = new JLabel(TDSLanguageUtils.getMessage("Users.Perfil"));                        
    JLabel lbl_taller = new JLabel(TDSLanguageUtils.getMessage("Users.Taller"));
    JLabel lbl_actiu = new JLabel(TDSLanguageUtils.getMessage("Users.Activo"));
    JLabel lbl_alta = new JLabel(TDSLanguageUtils.getMessage("Users.Alta"));                        
    JLabel lbl_modificacio = new JLabel(TDSLanguageUtils.getMessage("Users.Modifciación"));
    JLabel lbl_baixa = new JLabel(TDSLanguageUtils.getMessage("Users.Baja"));  
    JLabel showAlta ;
    JLabel showModificacio ;                        
    JLabel showBaixa ;
                     
    JTextField txt_id;
    JTextField txt_nom;                    
    JTextField txt_cognom1;
    JTextField txt_cognom2;
    JTextField txt_usuari;
    JPasswordField txt_pass1;
    JPasswordField txt_pass2;    
    
    JComboBox llistaTallers ;
    JComboBox llistaPerfils ;
    
    ArrayList<Taller> tallers ;
    ArrayList<Perfil> perfils ;
    
            ButtonGroup actiu ;
        JRadioButton actiuSi ;
        JRadioButton actiuNo ;
    
    public GestionConexionEditUser(GestorConexionInterface conexion) {
        this.conexion = conexion;

        txt_id = new JTextField();
        txt_nom = new JTextField();                    
        txt_cognom1 = new JTextField();   
        txt_cognom2 = new JTextField();   
        txt_usuari = new JTextField();
        txt_pass1 = new JPasswordField();
        txt_pass2 = new JPasswordField();               
               
        showAlta = new JLabel();
        showModificacio = new JLabel();
        showBaixa = new JLabel();

        actiu = new ButtonGroup();
        actiuSi = new JRadioButton(TDSLanguageUtils.getMessage("Users.Si"), false);
        actiuNo = new JRadioButton(TDSLanguageUtils.getMessage("Users.No"), true);

        actiu.add(actiuSi);
        actiu.add(actiuNo);

                    /* Llista de tallers */
        try {
            tallers = conexion.getLlistaTallers();
            llistaTallers = new JComboBox();
            for(int i = 0; i < tallers.size(); i++ ) {
                Taller t = tallers.get(i);
                llistaTallers.addItem(t);
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        /* Llista de tipus d'usuari o perfils */

        try {
            perfils = conexion.getLlistaPerfils();
            llistaPerfils = new JComboBox();
            for(int i = 0; i < perfils.size(); i++ ) {
                Perfil p = perfils.get(i);
                llistaPerfils.addItem(p);
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();            
        }


        
        editUserWindow=new JDesktopPane();
        
        lbl_titol1 = new JLabel(TDSLanguageUtils.getMessage("Users.TitleEdit"));
        lbl_titol1.setForeground(Color.white);
        lbl_titol1.setBounds(200, 10, 200, 40);

        lbl_nom.setForeground(Color.white);
        lbl_nom.setBounds(20, 75, 200, 25);
        txt_nom.setBounds(200, 75, 200, 25);
                        
        lbl_cognom1.setForeground(Color.white);
        lbl_cognom1.setBounds(20, 110, 200, 25);
        txt_cognom1.setBounds(200, 110, 200, 25);

        lbl_cognom2.setForeground(Color.white);
        lbl_cognom2.setBounds(20, 145, 200, 25);
        txt_cognom2.setBounds(200, 145, 200, 25);
        
        lbl_usuari.setForeground(Color.white);
        lbl_usuari.setBounds(20, 180, 200, 25);
        txt_usuari.setBounds(200, 180, 200, 25);

                        
        lbl_contrasenya1.setForeground(Color.white);
        lbl_contrasenya1.setBounds(20, 215, 200, 25);
        txt_pass1.setBounds(200, 215, 200, 25);                        
                        
        lbl_contrasenya2.setForeground(Color.white);
        lbl_contrasenya2.setBounds(20, 250, 200, 25);
        txt_pass2.setBounds(200, 250, 200, 25);                        
                        
        lbl_perfil.setForeground(Color.white);
        lbl_perfil.setBounds(20, 285, 200, 25);         
        llistaPerfils.setBounds(200, 285, 200, 25);
                        
        lbl_taller.setForeground(Color.white);
        lbl_taller.setBounds(20, 320, 200, 25);
        llistaTallers.setBounds(200, 320, 200, 25);

        lbl_actiu.setForeground(Color.white);
        lbl_actiu.setBounds(20, 355, 200, 25);
        actiuSi.setForeground(Color.white);
        actiuSi.setBounds(200, 355, 50, 25);
        actiuNo.setForeground(Color.white);                        
        actiuNo.setBounds(250, 355, 50, 25);

        lbl_alta.setForeground(Color.white);
        lbl_alta.setBounds(20, 390, 200, 25);
        showAlta.setForeground(Color.white);
        showAlta.setBounds(200, 390, 200, 25);

        lbl_modificacio.setForeground(Color.white);
        lbl_modificacio.setBounds(20, 425, 200, 25);
        showModificacio.setForeground(Color.white);
        showModificacio.setBounds(200, 425, 200, 25);                        
                        
                        
        lbl_baixa.setForeground(Color.white);
        lbl_baixa.setBounds(20, 460, 200, 25);
        showBaixa.setForeground(Color.white);
        showBaixa.setBounds(200, 460, 200, 25);
        
      
        editUserWindow.add(lbl_titol1);
        
        editUserWindow.add(lbl_nom);
        editUserWindow.add(lbl_cognom1);
        editUserWindow.add(lbl_cognom2);        
        editUserWindow.add(lbl_usuari);
        editUserWindow.add(lbl_contrasenya1);
        editUserWindow.add(lbl_contrasenya2);
        editUserWindow.add(lbl_perfil);
        editUserWindow.add(lbl_taller);
        editUserWindow.add(lbl_actiu);       

        editUserWindow.add(txt_nom);
        editUserWindow.add(txt_cognom1);
        editUserWindow.add(txt_cognom2);        
        editUserWindow.add(txt_usuari);
        editUserWindow.add(txt_pass1);
        editUserWindow.add(txt_pass2);                        

        editUserWindow.add(actiuSi);                        
        editUserWindow.add(actiuNo);                             
        editUserWindow.add(llistaTallers);                             
        editUserWindow.add(llistaPerfils);                             
                   
        this.add(editUserWindow);
    }
    
    
    public void edicio(int id){
        
        SimpleDateFormat datas = new SimpleDateFormat("dd/MM/yyyy");
                    
        /* Botons usuari actiu */
                    
        /* Carreguem l'usuari */
         Usuari user = new Usuari();
                        
        try {
              user = conexion.loadUsuari(id);
        } catch (RemoteException e) {
                      e.printStackTrace();
        } catch(SQLException e) {
                      e.printStackTrace();                            
        }
     
        txt_id.setText(Integer.toString(user.getID()));
        txt_usuari.setText(user.getUsuari());
        txt_nom.setText(user.getNom());
        txt_cognom1.setText(user.getCognom1());
        txt_cognom2.setText(user.getCognom2());
        
        /* Predeterminem el perfil de l'usuari. Ho fem en tres passos 
         * 1.- Fem que el JComboBox sigui editable. Això ens permet predeterminat un valor.
         * 2.- Indiquem quin objecte serà el predeterminat (atribut de tipus Perfil perfil) de l'usuari
         * 3.- Fem que el JComboBox NO sigui editable.
         */
        
        llistaPerfils.setEditable(true);
        llistaPerfils.setSelectedItem(user.getPerfil());
        llistaPerfils.setEditable(false);
        
        /* Predeterminem el taller de l'usuari. Ho fem en tres passos 
         * 1.- Fem que el JComboBox sigui editable. Això ens permet predeterminat un valor.
         * 2.- Indiquem quin objecte serà el predeterminat (atribut de tipus Taller taller) de l'usuari
         * 3.- Fem que el JComboBox NO sigui editable.
         */
        
        System.out.println(user.getTaller().toString());
        
        llistaTallers.setEditable(true);
        llistaTallers.setSelectedItem(user.getTaller());
        llistaTallers.setEditable(false);
        
        /* Actiu o no */
        
        
        System.out.println(Boolean.toString(user.getActiu()));
        
        if(user.getActiu() == true) {
            actiuSi.setSelected(true);
            actiuNo.setSelected(false);
        } else {
            actiuNo.setSelected(true);
            actiuSi.setSelected(false);
        }
        
        if(user.getDataAlta() != null){
            showAlta.setText(datas.format(user.getDataAlta()));
            editUserWindow.add(lbl_alta);
            editUserWindow.add(showAlta);                
        }
          if(user.getDataModificacio() != null){
            showModificacio.setText(datas.format(user.getDataModificacio()));                        
            editUserWindow.add(lbl_modificacio); 
            editUserWindow.add(showModificacio);                          
          }  
          
          if(user.getDataBaixa() != null) {
            showBaixa.setText(datas.format(user.getDataBaixa()));                        
            editUserWindow.add(lbl_baixa);           
            editUserWindow.add(showBaixa);               
          }
        
        btn_update = new JButton();
        btn_update.setText("Actualizar");
        btn_update.setBounds(50, 500, 100, 40);

        /* Crear listener */
        this.btn_update.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent paramAnonymousActionEvent)   {
                System.out.println(TDSLanguageUtils.getMessage("Users.Update"));
                
                Usuari u = new Usuari();
                u.setID(Integer.parseInt(txt_id.getText()));
                u.setNom(txt_nom.getText());
                u.setCognom1(txt_cognom1.getText());
                u.setCognom2(txt_cognom2.getText());
                u.setUsuari(txt_usuari.getText());
                u.setContrasenya(null);
                u.setTaller((Taller)llistaTallers.getSelectedItem());
                u.setPerfil((Perfil)llistaPerfils.getSelectedItem());

                                
                if(actiuSi.isSelected()) {
                    u.setActiu(true);
                } else {
                    u.setActiu(false);
                }
                
                /* Comprovació password */
                
                /* L'usuari ha teclajat quelcom */
                if(txt_pass1.getPassword().length>0) {
                    
                    /* Comporvar que la contrasenya té almenys 5 caràcters */
                    if(txt_pass1.getPassword().length<5) {
                        /* Passord massa curt */
                        Principal.showError(TDSLanguageUtils.getMessage("Users.ShortPassword"));
                        u.setReadySave(false);
                    } else {
                            String pass1 = new String(txt_pass1.getPassword());
                            String pass2 = new String(txt_pass2.getPassword());
                            if(pass1.equals(pass2)) {
                                u.setContrasenya(new String(txt_pass1.getPassword()));
                                u.setUpdateContrasenya(true);
                                u.setReadySave(true);
                            } else {
                                Principal.showError(TDSLanguageUtils.getMessage("Users.NoIdenticalPass"));
                                u.setReadySave(false);
                            }
                    }
                    
                } else {
                    /* "L'usuari NO ha teclejat password" */
                        u.setUpdateContrasenya(false);
                        u.setReadySave(true);
                }
                
                if(u.getReadySave() == true) {
                    try {
                        conexion.saveUsuari(u);
                    } catch (RemoteException e) {
                        e.printStackTrace();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                
            };
        });
        
        
        btn_back = new JButton();
        btn_back.setText(TDSLanguageUtils.getMessage("Users.Back"));
        btn_back.setBounds(200, 500, 100, 40);
        /* Crear listener */
        
        editUserWindow.add(btn_update);
        editUserWindow.add(btn_back);
        
   }

    
    public void nou(){
        btn_add = new JButton();
        btn_add.setText(TDSLanguageUtils.getMessage("Users.Add"));
        btn_add.setBounds(200, 500, 150, 40);
        
         this.btn_add.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent paramAnonymousActionEvent)   {
                        
                try {
                    if(conexion.checkUsername(txt_usuari.getText())==false) {
                        Usuari u = new Usuari();
                        u.setNom(txt_nom.getText());
                        u.setCognom1(txt_cognom1.getText());
                        u.setCognom2(txt_cognom2.getText());
                        u.setUsuari(txt_usuari.getText());
                        u.setContrasenya(null);
                        u.setTaller((Taller)llistaTallers.getSelectedItem());
                        u.setPerfil((Perfil)llistaPerfils.getSelectedItem());

                        if(actiuSi.isSelected()) {
                            u.setActiu(true);
                        } else {
                            u.setActiu(false);
                        }

                        /* L'usuari ha teclajat quelcom */
                       
                            /* Comporvar que la contrasenya té almenys 5 caràcters */
                            if(txt_pass1.getPassword().length<5) {
                                /* Passord massa curt */
                                Principal.showError(TDSLanguageUtils.getMessage("Users.ShortPassword"));
                                u.setReadySave(false);
                            } else {
                                    String pass1 = new String(txt_pass1.getPassword());
                                    String pass2 = new String(txt_pass2.getPassword());
                                    if(pass1.equals(pass2)) {
                                        u.setContrasenya(new String(txt_pass1.getPassword()));
                                        u.setReadySave(true);
                                    } else {
                                        Principal.showError(TDSLanguageUtils.getMessage("Users.NoIdenticalPass"));
                                        u.setReadySave(false);
                                    }
                            }

                    if(u.getReadySave()==true) {
                        conexion.createUsuari(u);
                    }
                            
                    } else {
                        Principal.showError(TDSLanguageUtils.getMessage("Users.Duplicado"));
                    }
                    
                } catch (RemoteException e) {
                    
                } catch(SQLException e){
                    
                }
                
            
            
            };
         });
         editUserWindow.add(btn_add);
        
    }
    
   /* public void showMessage(String msg){
         JOptionPane.showMessageDialog(rootPane, msg);
    }*/
}
